package com.thinkgsp.jxc.persistence;

import java.math.BigDecimal;
import java.sql.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.thinkgsp.jxc.model.RpArpBill;

/**
 * 应收应付单持久化类
 * @author evan
 *
 */
public interface RpArpBillMapper {

	/**
	 * 获取应收应付单
	 * @param arpBillId
	 * @return
	 */
	public <T extends RpArpBill> T getArpBill(Long arpBillId);
	
	/**
	 * 根据出入库单据获取应收应付单
	 * @param stockBillId
	 * @return
	 */
	public <T extends RpArpBill> T getArpBillFromStockBill(Long stockBillId);
	
	/**
	 * 获取应收应付单列表
	 * @param begDate 开始日期  不能包含时间
	 * @param endDate 截止日期 不能包含时间
	 * @param direct 1 : 应收;-1 应付
	 * @return
	 */
	public <T extends RpArpBill> List<T> getArpBillList(@Param(value="begDate")Date begDate,@Param(value="endDate")Date endDate,@Param(value="direct")Integer direct);
	
	/**
	 * 获取应收应付单列表
	 * @param begDate 开始日期  不能包含时间
	 * @param endDate 截止日期 不能包含时间
	 * @param direct 1 : 应收;-1 应付
	 * @return
	 */
	public <T extends RpArpBill> List<T> getArpBillListWithCust(@Param(value="begDate")Date begDate,@Param(value="endDate")Date endDate,@Param(value="custId")Integer custId,@Param(value="direct")Integer direct);
	/**
	 * 新增应收应付单
	 * @param arpBill
	 */
	public void insertArpBill(RpArpBill arpBill);
	
	/**
	 * 修改应收应付单
	 * @param arpBill
	 */
	public void updateArpBill(RpArpBill arpBill);
	
	/**
	 * 删除应收应付单
	 * @param arpBillId
	 */
	public int deleteArpBill(Long arpBillId);
	
	/**
	 * 单据核销,必须是已归档的单据才能核销
	 * @param arpBillId
	 * @param amount 核销金额
	 * @return
	 */
	public int billCheck(@Param(value="arpBillId")Long arpBillId,@Param(value="amount")BigDecimal amount);
	
	/**
	 * 单据反核销,必须是已归档的单据才能反核销
	 * @param arpBillId
	 * @param amount
	 * @return
	 */
	public int billUnCheck(@Param(value="arpBillId")Long arpBillId,@Param(value="amount")BigDecimal amount);
	
	/**
	 * 更新归档状态,必须是未核销单据才能反归档
	 * @param arpBillId
	 * @param archived
	 * @return
	 */
	public int billArchive(@Param(value="arpBillId")Long arpBillId,@Param(value="archived")Boolean archived);
	
	/**
	 * 获取未结算的应收应付单据
	 * @param custId
	 * @param direct
	 * @return
	 */
	public List<RpArpBill> getUnSettleArpBill(@Param(value="custId")Integer custId,@Param(value="direct")Integer direct);
	
}
